home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / gnu_st.lha / gnu_st / smalltalk-1.1.1 / stix / genevt.st < prev    next >
Text File  |  1991-09-12  |  13KB  |  370 lines

  1. "======================================================================
  2. |
  3. | Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  4. | Written by Steve Byrne.
  5. |
  6. | This file is part of GNU Smalltalk.
  7. |
  8. | GNU Smalltalk is free software; you can redistribute it and/or modify it
  9. | under the terms of the GNU General Public License as published by the Free
  10. | Software Foundation; either version 1, or (at your option) any later version.
  11. | GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
  12. | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  13. | FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  14. | details.
  15. | You should have received a copy of the GNU General Public License along with
  16. | GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
  17. | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
  18. |
  19.  ======================================================================"
  20.  
  21.  
  22. "
  23. |     Change Log
  24. | ============================================================================
  25. | Author       Date       Change 
  26. | sbyrne     24 May 90      created.
  27. |
  28. "
  29.  
  30. Smalltalk at: #DataTypeMap put: Dictionary new.
  31. Smalltalk at: #DataTypeSize put: Dictionary new.
  32. Smalltalk at: #MapInfo put: Dictionary new!
  33.  
  34.  
  35. DataTypeMap at: #card8 put: #ubyte.
  36. DataTypeMap at: #bool put: #byte.
  37. DataTypeMap at: #keycode put: #byte.
  38. DataTypeMap at: #button put: #byte.
  39. DataTypeMap at: #card16 put: #uword.
  40. DataTypeMap at: #bitmask put: #uword.
  41. DataTypeMap at: #int16 put: #word.
  42. DataTypeMap at: #setOfKeyButMask put: #word.
  43. DataTypeMap at: #card32 put: #ulong.
  44. DataTypeMap at: #window put: #long.
  45. DataTypeMap at: #drawable put: #long.
  46. DataTypeMap at: #atom put: #long.
  47. DataTypeMap at: #colormap put: #long.
  48. DataTypeMap at: #timestamp put: #long.
  49. DataTypeMap at: #keymap put: 'getUnpaddedString: 31'.
  50.  
  51.  
  52. DataTypeSize at: #card8 put: 1.
  53. DataTypeSize at: #bool put: 1.
  54. DataTypeSize at: #keycode put: 1.
  55. DataTypeSize at: #button put: 1.
  56. DataTypeSize at: #card16 put: 2.
  57. DataTypeSize at: #bitmask put: 2.
  58. DataTypeSize at: #int16 put: 2.
  59. DataTypeSize at: #setOfKeyButMask put: 2.
  60. DataTypeSize at: #card32 put: 4.
  61. DataTypeSize at: #window put: 4.
  62. DataTypeSize at: #drawable put: 4.
  63. DataTypeSize at: #atom put: 4.
  64. DataTypeSize at: #colormap put: 4.
  65. DataTypeSize at: #timestamp put: 4.
  66. DataTypeSize at: #keymap put: 31.
  67.  
  68.  
  69. MapInfo at: #window put: 'self mappedId: '.
  70. MapInfo at: #drawable put: 'self mappedId: '.
  71. MapInfo at: #atom put: 'self mappedId: '.
  72. MapInfo at: #colormap put: 'self mappedId: '
  73. !
  74.  
  75.  
  76. Object subclass: #XEvent
  77.        instanceVariableNames: 'sequenceNumber'
  78.        classVariableNames: 'EventMap'
  79.        poolDictionaries: ''
  80.        category: 'X hacking'
  81. !
  82.  
  83. !Object class methodsFor: 'hacking'!
  84.  
  85. genErrorInit
  86.     | stream |
  87.     stream _ FileStream open: 'Xerr.st' mode: 'w'.
  88.     stream close.
  89. !
  90.  
  91. genEventInit
  92.     | stream |
  93.     stream _ FileStream open: 'Xevt.st' mode: 'w'.
  94.     stream close.
  95. !
  96.  
  97. genErrorClass: className args: anArray
  98.     | stream |
  99.     stream _ FileStream open: 'Xerr.st' mode: 'a'.
  100.     self genErrorClassDef: className on: stream args: anArray.
  101.     self genErrorClassMethods: className on: stream args: anArray.
  102.     stream nextPut: Character newPage.
  103.     stream nl.
  104.     stream close
  105. !
  106.  
  107. genEventClass: className args: anArray
  108.     | stream |
  109.     stream _ FileStream open: 'Xevt.st' mode: 'a'.
  110.     self genEventClassDef: className on: stream args: anArray.
  111.     self genEventClassMethods: className on: stream args: anArray.
  112.     stream nextPut: Character newPage.
  113.     stream nl.
  114.     stream close
  115. !
  116.  
  117. " private definitions "
  118.  
  119. genErrorClassDef: className on: aStream args: anArray
  120.     self genClassDef: 'Error' forClass: className on: aStream args: anArray
  121. !
  122.  
  123. genEventClassDef: className on: aStream args: anArray
  124.     self genClassDef: 'Event' forClass: className on: aStream args: anArray
  125. !
  126.  
  127. genClassDef: type forClass: className on: aStream args: anArray
  128.     'X', type, ' subclass: #' printOn: aStream.
  129.     className, type printOn: aStream.
  130.     aStream nl.
  131.     self genClassInstVars: anArray on: aStream.
  132. '    classVariableNames: ''''
  133.     poolDictionaries: ''''
  134.     category: ''X hacking''
  135. !' printOn: aStream.
  136.     aStream nl.
  137.     aStream nl
  138. !
  139.  
  140. genErrorClassMethods: className on: aStream args: anArray
  141.     self genClassMethods: 'Error' forClass: className on: aStream args: anArray
  142. !
  143.  
  144. genEventClassMethods: className on: aStream args: anArray
  145.     self genClassMethods: 'Event' forClass: className on: aStream args: anArray
  146. !
  147.  
  148. genClassMethods: type forClass: className on: aStream args: anArray
  149.     | totalBytes dataType | 
  150.     '!', className, type, ' class methodsFor: ''instance creation''!
  151.  
  152. newFrom: aStream
  153.     ^self new initFrom: aStream
  154. !!
  155.  
  156. ' printOn: aStream.
  157.     self genAccessorMethods: type forClass: className on: aStream args: anArray.
  158.     '!', className, type, ' methodsFor: ''private''!
  159.  
  160. ' printOn: aStream.
  161. 'initFrom: aStream' printOn: aStream.  aStream nl.
  162.     totalBytes _ 0.
  163.     anArray do:
  164.     [ :var | '    ' printOn: aStream.
  165.          var size > 1
  166.              ifTrue: [ (var at: 1) printOn: aStream.
  167.                    ' _ ' printOn: aStream ].
  168.          'aStream ' printOn: aStream.
  169.          dataType _ (var at: var size).
  170.                  (self mapType: dataType) printOn: aStream.
  171.          totalBytes _ totalBytes + (self typeSize: dataType).
  172.          '. ' printOn: aStream. aStream nl ].
  173.     '    aStream skipBytes: ' printOn: aStream.
  174.     (31 - totalBytes) printOn: aStream.
  175.     aStream nl.
  176.     '!!' printOn: aStream.
  177.     aStream nl.
  178.     aStream nl.
  179. !
  180.  
  181. genAccessorMethods: type forClass: className on: aStream args: anArray
  182.     | name varType |
  183.     '!', className, type, ' methodsFor: ''accessing''!
  184.  
  185. ' printOn: aStream.
  186.     anArray do: 
  187.     [ :var | var size > 1
  188.              ifTrue: [ name _ (var at: 1).
  189.                    varType _ (var at: var size).
  190.                    name printOn: aStream.
  191.                    aStream nl.
  192.                    '    ^' printOn: aStream.
  193.                                (MapInfo includesKey: varType)
  194.                    ifTrue: [ (MapInfo at: varType), ' ',
  195.                          name printOn: aStream]
  196.                    ifFalse: [ name printOn: aStream ].
  197.                    aStream nl.
  198.                    '!' printOn: aStream.
  199.                    aStream nl.
  200.                    aStream nl ].
  201.         ].
  202.     '!' printOn: aStream.
  203.     aStream nl.
  204.     aStream nl.
  205. !
  206.  
  207. mapType: aType
  208.     ^DataTypeMap at: aType
  209.          ifAbsent: [ self error: 'no such type: ', (aType printString) ]
  210. !
  211.  
  212. typeSize: aType
  213.     ^DataTypeSize at: aType
  214.              ifAbsent: [ self error: 'no such type: ', (aType printString) ]
  215. !    
  216.  
  217. genClassInstVars: anArray on: aStream
  218.     | varName |
  219.     aStream tab.
  220.     'instanceVariableNames: ''' printOn: aStream.
  221.     anArray do: 
  222.     [ :var | var size = 2
  223.              ifTrue: [ (#(sequenceNumber)
  224.                    indexOf: (varName _ var at: 1)) = 0
  225.                    ifTrue: [ varName, ' ' printOn: aStream ] ]
  226.              ].
  227.     '''' printOn: aStream.
  228.     aStream nl
  229. !!
  230.  
  231. Object genEventInit.
  232. Object genEventClass: 'KeyPress' 
  233.     args: #((detail keycode) (sequenceNumber card16) (time timestamp) 
  234.         (root window) (event window) (child window) 
  235.         (rootX int16) (rootY int16) (eventX int16) (eventY int16)
  236.         (state setOfKeyButMask) (sameScreen bool)).
  237. Object genEventClass: 'KeyRelease' 
  238.     args: #((detail keycode) (sequenceNumber card16) (time timestamp) 
  239.         (root window) (event window) (child window) 
  240.         (rootX int16) (rootY int16) (eventX int16) (eventY int16)
  241.         (state setOfKeyButMask) (sameScreen bool)).
  242. Object genEventClass: 'ButtonPress' 
  243.     args: #((detail button) (sequenceNumber card16) (time timestamp) 
  244.         (root window) (event window) (child window) 
  245.         (rootX int16) (rootY int16) (eventX int16) (eventY int16)
  246.         (state setOfKeyButMask) (sameScreen bool)).
  247. Object genEventClass: 'ButtonRelease' 
  248.     args: #((detail button) (sequenceNumber card16) (time timestamp) 
  249.         (root window) (event window) (child window) 
  250.         (rootX int16) (rootY int16) (eventX int16) (eventY int16)
  251.         (state setOfKeyButMask) (sameScreen bool)).
  252. Object genEventClass: 'MotionNotify' 
  253.     args: #((detail card8) (sequenceNumber card16) (time timestamp) 
  254.         (root window) (event window) (child window) 
  255.         (rootX int16) (rootY int16) (eventX int16) (eventY int16)
  256.         (state setOfKeyButMask) (sameScreen bool)).
  257. Object genEventClass: 'EnterNotify' 
  258.     args: #((detail card8) (sequenceNumber card16) (time timestamp) 
  259.         (root window) (event window) (child window) 
  260.         (rootX int16) (rootY int16) (eventX int16) (eventY int16)
  261.         (state setOfKeyButMask) (mode card8) (focus card8)).
  262. Object genEventClass: 'LeaveNotify' 
  263.     args: #((detail card8) (sequenceNumber card16) (time timestamp) 
  264.         (root window) (event window) (child window) 
  265.         (rootX int16) (rootY int16) (eventX int16) (eventY int16)
  266.         (state setOfKeyButMask) (mode card8) (focus card8)).
  267. Object genEventClass: 'FocusIn' 
  268.     args: #((detail card8) (sequenceNumber card16) (event window) 
  269.         (mode card8)).
  270. Object genEventClass: 'FocusOut' 
  271.     args: #((detail card8) (sequenceNumber card16) (event window) 
  272.         (mode card8)).
  273.  
  274. Object genEventClass: 'KeymapNotify' 
  275.     args: #((keys keymap)).
  276.  
  277. Object genEventClass: 'Expose' 
  278.     args: #((card8) (sequenceNumber card16) (window window) 
  279.         (x card16) (y card16) (width card16) (height card16)
  280.         (count card16)).
  281.  
  282. Object genEventClass: 'GraphicsExposure' 
  283.     args: #((card8) (sequenceNumber card16) (drawable drawable) 
  284.         (x card16) (y card16) (width card16) (height card16)
  285.         (minorOp card16) (count card16) (majorOp card8)).
  286. Object genEventClass: 'NoExposure' 
  287.     args: #((card8) (sequenceNumber card16) (drawable drawable) 
  288.         (minorOp card16) (majorOp card8)).
  289. Object genEventClass: 'VisibilityNotify' 
  290.     args: #((card8) (sequenceNumber card16) (window window) 
  291.         (state card8)).
  292. Object genEventClass: 'CreateNotify' 
  293.     args: #((card8) (sequenceNumber card16) (parent window) (window window)
  294.         (x int16) (y int16) (width card16) (height card16)
  295.         (borderWidth card16) (overrideRedirect bool)).
  296. Object genEventClass: 'DestroyNotify' 
  297.     args: #((card8) (sequenceNumber card16) (event window) (window window)).
  298. Object genEventClass: 'UnmapNotify' 
  299.     args: #((card8) (sequenceNumber card16) (event window) (window window)
  300.         (fromConfigure bool)).
  301. Object genEventClass: 'MapNotify' 
  302.     args: #((card8) (sequenceNumber card16) (event window) (window window)
  303.         (overrideRedirect bool)).
  304. Object genEventClass: 'MapRequest' 
  305.     args: #((card8) (sequenceNumber card16) (parent window) (window window)).
  306. Object genEventClass: 'ReparentNotify' 
  307.     args: #((card8) (sequenceNumber card16) 
  308.         (event window) (window window) (parent window)
  309.         (x int16) (y int16) (overrideRedirect bool)).
  310. Object genEventClass: 'ConfigureNotify' 
  311.     args: #((card8) (sequenceNumber card16) 
  312.         (event window) (window window) (aboveSibling window)
  313.         (x int16) (y int16) (width card16) (height card16)
  314.         (borderWidth card16) (overrideRedirect bool)).
  315. Object genEventClass: 'ConfigureRequest' 
  316.     args: #((stackMode card8) (sequenceNumber card16) 
  317.         (parent window) (window window) (sibling window)
  318.         (x int16) (y int16) (width card16) (height card16)
  319.         (borderWidth card16) (valueMask bitmask)).
  320. Object genEventClass: 'GravityNotify' 
  321.     args: #((card8) (sequenceNumber card16) 
  322.         (event window) (window window)
  323.         (x int16) (y int16)).
  324. Object genEventClass: 'ResizeRequest' 
  325.     args: #((card8) (sequenceNumber card16) 
  326.         (window window)
  327.         (width card16) (height card16)).
  328. Object genEventClass: 'CirculateNotify' 
  329.     args: #((card8) (sequenceNumber card16) 
  330.         (event window) (window window) (window)
  331.         (place card8)).
  332. Object genEventClass: 'CirculateRequest' 
  333.     args: #((card8) (sequenceNumber card16) 
  334.         (parent window) (window window) (card32)
  335.         (place card8)).
  336. Object genEventClass: 'PropertyNotify' 
  337.     args: #((card8) (sequenceNumber card16) 
  338.         (window window) (atom atom)
  339.         (time timestamp) (state card8))
  340. !
  341.  
  342. Object genEventClass: 'SelectionClear' 
  343.     args: #((card8) (sequenceNumber card16) 
  344.         (time timestamp) (owner window) (selection atom)).
  345. Object genEventClass: 'SelectionRequest' 
  346.     args: #((card8) (sequenceNumber card16) 
  347.         (time timestamp) (owner window) (requestor window)
  348.         (selection atom) (target atom) (property atom)).
  349. Object genEventClass: 'SelectionNotify' 
  350.     args: #((card8) (sequenceNumber card16) 
  351.         (time timestamp) (requestor window)
  352.         (selection atom) (target atom) (property atom)).
  353. Object genEventClass: 'ColormapNotify' 
  354.     args: #((card8) (sequenceNumber card16) 
  355.         (window window) (colormap colormap)
  356.         (new bool) (state card8)).
  357. Object genEventClass: 'ClientMessage' 
  358.     args: #((format card8) (sequenceNumber card16) 
  359.         (window window) (type atom)
  360.         "says: 20 data").
  361. Object genEventClass: 'MappingNotify' 
  362.     args: #((card8) (sequenceNumber card16) 
  363.         (request card8) (keycode keycode)
  364.         (count card8)).
  365. !
  366.  
  367. Smalltalk quitPrimitive!
  368.